package com.hq.utils.jsoup;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;


import java.io.File;
import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Base64;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SihuHtml {

    /**
     * 四虎网站 视频昵称 baseb64 解析
     * base解码（方法一）
     *
     * @param var 待解码字符串
     * @return 解码字符串
     */
    public static String decode64(String var) {
        try {
            // 非空字符串才进行解码
            if (var == null && var.length() < 0) return null;
            // 查找匹配字符
            String findStrStart = "document.write";
            String findStrEnd = "'));";
            Pattern pattern = Pattern.compile(findStrStart);
            Matcher matcher = pattern.matcher(var);
            if (matcher.find()) {
                System.out.println();
                var = var.substring(matcher.end() + 4, var.indexOf(findStrEnd));
            }

            // 解码
            return new String(Base64.getDecoder().decode(var), "utf-8");
        } catch (Exception e) {

        }
        return null;

    }

    /**
     * document.write(d('5aWz5LyY'));
     * 首页解析 用于解析标签
     */

    public void SihuMenuHome() {
        try {
            ///   String path = "S:\\work\\TvSeroive\\src\\main\\resources\\static\\home.html";
            // Document doc = Jsoup.parse(new File(path), "UTF-8");
            String uir = "https://www.2e010b15.com/av/index.html";
            Document doc = Jsoup.connect(uir).get();

            String menuName = "";//菜单昵称
            String menuPath = "";//菜单路径


            //定位到一级 菜单
            Elements menus = doc.select("div.menu.clearfix > dl");
            // 遍历 一级 菜单
            for (Element menut : menus) {
                // 一级菜单 a 标签
                Element dt = menut.select("dt > a").first();
                // 一级菜单 路径
                menuPath = dt.attr("data-url");
                // 一级菜单昵称
                menuName = decode64(dt.data());
                //过滤图文 菜单
                if (!menuPath.equals("/pic/")) {
                    // 女优标签 菜单判断
                    if (menuName.equals("女优") && menuPath.equals("/av/")) {
                        // 女优标签 菜单添加到数据库
                        System.out.println(menuName);
                        System.out.println(menuPath);

                        //定位 女优标签 二级菜单
                        Elements dd = menut.select("dd > a");
                        // 遍历 女优标签 二级菜单
                        for (Element dda : dd) {
                            //女优标签 二级菜单路径
                            menuPath = dda.attr("href");
                            //女优标签 二级菜单昵称
                            menuName = decode64(dda.data());
                            if (menuName.equals("女优合集") && menuPath.equals("/av/index.html")) {
                                // 定位 女优合集条目
                                Elements itema = doc.select("div.row.col6.clearfix > dl > dt > a");
                                // 遍历 女优合集条目
                                for (Element item : itema) {
                                    //女优标签 二级菜单昵称
                                    menuName = item.select("img").first().attr("alt");
                                    //女优标签 二级菜单路径
                                    menuPath = item.attr("href");
                                    if (!menuName.equals("女优合集") && !menuPath.equals("/av/index.html")) {
                                        // 女优合集处理
                                        System.out.println(menuName);
                                        System.out.println(menuPath);
                                    }
                                }

                            } else {
                                // 二级菜单 女优合集  处理

                                System.out.println(menuName);
                                System.out.println(menuPath);

                            }

                        }


                    } else {
                        // 不是女优标签  一级菜单 处理
                        System.out.println(menuName);
                        System.out.println(menuPath);
                        //定位 二级菜单
                        Elements dd = menut.select("dd > a");
                        for (Element dda : dd) {
                            // 二级菜单路径
                            menuPath = dda.attr("href");
                            // 二级菜单昵称
                            menuName = decode64(dda.data());

                            // 二级菜单 处理
                            System.out.println(menuName);
                            System.out.println(menuPath);
                        }


                    }


                }
            }
        } catch (Exception e) {

        }


    }

    /**
     * 四虎网站分组条目计算拥有多少页面
     * https://www.2e010b15.com/av/yjly/
     */

    public void SihugroupItemCount() throws IOException {
        String uir = "https://www.2e010b15.com/av/yjly/";
        Document doc = Jsoup.connect(uir).get();
        //定位 分页按钮 首页
        Elements as = doc.select("div.pc_pagination > a");
        if (as.size() == 0)
        {
            System.out.println("没有分页");
            return;
        }

        //获取最后一页链接数量
        String href = as.last().attr("href");
        //获取分组分页 数量切割视频地址
        int count = Integer.parseInt(href.substring(href.indexOf("index_") + 6, href.indexOf(".html")));
        System.out.println(count);
        String index;

        // 获取视频条目地址拼接
        for (int i = 1; i <= count; i++) {
            index = null;
            index = href.substring(0, href.indexOf("_" + count + ".html"));
            //首页地址
            if (i == 1) {
                index = index + ".html";
                System.out.println(index);
            } else {
                index = index + "_" + i + ".html";
                System.out.println(index);
            }

        }
        // JSONUtils
    }

    /**
     * 四虎网站html解析 视频条目页面解析
     */
    public void SihuHttpVideoItem() throws IOException {
        String path = "K:\\qqtv\\spring\\mybatis\\tvvideo\\src\\main\\resources\\static\\SihuHttpPath.html";

        //   Document doc = Jsoup.parse(new File(path), "UTF-8");
        String uir = "https://www.2e010b15.com/av/ydgzy/index_2.html";
        Document doc = Jsoup.connect(uir).get();
        //定位到视频条目 div.row.col5.clearfix
        Elements items = doc.select("div.row.col5.clearfix > dl > dt > a");
        for (Element item : items) {
            String href = item.attr("href");
            System.out.println(href);
        }


    }

    /**
     * * 解析四虎 网站视频播放页面
     * * 获取视频基本信息
     * * 1 uir m3u8播放地址
     * * 2 tmp 视频上传时间
     * * 3 name 视频昵称
     * * 4 视频下载链接
     */
    public void siHuVideoPaly(String paths) {
        try {
            Document doc = Jsoup.connect(paths).get();
            // 获取 m3u8 链接   <div class="menu clearfix">
            Elements elements = doc.select("script");
            String m3u8Path = null;
            for (Element element : elements) {
                //返回 script 标签 对象数据
                String var = element.data();
                // 查找匹配字符
                Pattern pattern = Pattern.compile("playUrl=\"//\"+");
                Matcher matcher = pattern.matcher(var);
                if (matcher.find()) {
                    int iplay = var.indexOf("iplay");
                    if (iplay > 0) {
                        //"//"+iplay+"
                        m3u8Path = var.substring(matcher.end() + 8, var.indexOf("\";var posterImg="));

                    } else {
                        m3u8Path = var.substring(matcher.end() + 7, var.indexOf("\";var posterImg="));
                    }

                }

            }

            System.out.println(m3u8Path);


            // 获取视频信息 <div class="pannel clearfix">
            Element magess = doc.select("div.pannel.clearfix").first();
            String download = magess.select("div.download > a").first().attr("href");
            System.out.println(download);

            // 视频昵称 data
            String videoName = "";
            try {
                // 视频昵称 data
                videoName = magess.select("H3.title").first().data();
                if (videoName.length() > 3) {
                    videoName = SihuHtml.decode64(videoName);
                } else {
                    videoName = magess.select("H3.title").first().text();


                }
                if (videoName.length() > 3) {
                    videoName = videoName.substring(3);

                }

            } catch (Exception e) {
                System.out.println("视频昵称获取失败");
            }

            System.out.println(videoName);


            // 获取时间
            String data = magess.select("p.data").get(1).text();
            // java Sting 转 LocalDate
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
            LocalDate localDate = LocalDate.parse(data, formatter);
            System.out.println(localDate); // 输出：2023-03-25
        } catch (Exception e) {
            System.out.println("视频解析失败");
        }

    }

    /**
     * * 解析四虎 网站视频播放页面
     * * 获取视频基本信息
     * * 1 uir m3u8播放地址
     * * 2 tmp 视频上传时间
     * * 3 name 视频昵称
     * * 4 视频下载链接
     */
    public void siHuVideoPaly() {
        String path = "K:\\qqtv\\spring\\mybatis\\tvvideo\\src\\main\\resources\\static\\videom.html";
        //  Document doc = Jsoup.parse(new File(path), "UTF-8");
        String uir = "https://www.c5704721.com/html/202409/96006.html";
        this.siHuVideoPaly(uir);


    }

    /**
     * 解析四虎 网站视频播放页面
     * 获取视频基本信息
     * 1 uir m3u8播放地址
     * 2 tmp 视频上传时间
     * 3 name 视频昵称
     * 4 视频下载链接
     */
    void play() throws IOException {
        String path = "S:\\work\\TvSeroive\\src\\main\\resources\\static\\play1.html";
        Document doc = Jsoup.parse(new File(path), "UTF-8");
        String uir = "https://www.3e2ef2eb.com/html/202407/88599.html";
        //   Document doc = Jsoup.connect(uir).get();

        // 获取 m3u8 链接
        Elements elements = doc.select("script");
        String m3u8Path = null;
        for (Element element : elements) {
            //返回 script 标签 对象数据
            String var = element.html();
            // 查找匹配字符
            Pattern pattern = Pattern.compile("playUrl=\"//\"+");
            Matcher matcher = pattern.matcher(var);
            if (matcher.find()) {
                int iplay = var.indexOf("iplay");
                if (iplay > 0) {
                    //"//"+iplay+"
                    m3u8Path = var.substring(matcher.end() + 8, var.indexOf("\";var posterImg="));

                } else {
                    m3u8Path = var.substring(matcher.end() + 7, var.indexOf("\";var posterImg="));
                }

            }

        }

        System.out.println(m3u8Path);


    }

    /**
     * 获取最新地址
     *
     * @return 返回最新网址
     * @throws IOException 异常
     */
    public String getUir(String uir) throws IOException {
        Document doc = Jsoup.connect(uir).get();
        String body = doc.select("body").first().data();
        // 查找匹配字符
        String window = "window.atob";
        Matcher matcher = Pattern.compile(window).matcher(body);
        if (matcher.find()) {
            String ba64 = body.substring(matcher.end() + 2, body.indexOf("window.btoa(") - 10);
            return new String(Base64.getDecoder().decode(ba64));
        }

        //最新网址判断
        String atob = "obfuscatedEncryptedContent";
        Matcher home = Pattern.compile(atob).matcher(body);
        if (home.find()) {
            return uir;
        }

        return null;
    }


}